let baogeTools = require("slib/Baoge");
let baogeUtils = require('slib/baogeUtils');
let pageUtils = require('slib/pageNode');

// 实例化 验证对象
Ssdun = new SSDUNSDK(
    "44aef5d22f34d330eaa035640243f09b8d2fb60be2b946389f405e6fecf2b005",
    3799,
    0,
    ""
);
Ssdun.debug = true;

// 验证系统
const ssdunCheck = (cardText) => {
    Ssdun.debug = false; //否则会输出两次
    Ssdun.设置卡密(cardText.trim());
    let cardInfo = Ssdun.卡密验证();
    // baogeUtils.logStringify(cardInfo);

    // http://api.ssdun.cn:8520/ec/down?user_key=44aef5d22f34d330eaa035640243f09b8d2fb60be2b946389f405e6fecf2b005&file_md5=5774F8B42F7B15D82CDC09FB162064CD
    if (cardInfo['code'] === 0) {
        let data = JSON.parse(cardInfo.data);
        let msg  = "卡密激活时间: " + data.start_time + "\n" + "卡密到期时间: " + data.end_time + "\n" + "卡密剩余时间: " + data.remaining_days + "天";
        toast(msg);
        sleep(2000);
    } else if(cardInfo['code']  === 1) {
        toast(cardInfo.data.error_msg);
        exit(); // 停止脚本
    }
}
let uiConfig = {}; // 配置对象
// 获取当前手机IP地址
const getIpInfo = isCheck => {
    // logd('isCheck', isCheck);
    if (isCheck === 'true') {
        const url = "https://api.vvhan.com/api/getIpInfo";
        let respones = http.httpGet(url,"",5000,"");
        if (respones && respones.length > 0) {
            respones = JSON.parse(respones);
            toast(respones.info.city + " -> ip:" + respones.ip);
        }else {
            toast("获取IP信息失败");
        }
        updateConfig('checkIp', 'false');
        exit();
    }
}

// 清除本地数据
const clearData = isCheck => {
    if (isCheck === 'true') {
        baogeUtils.deleteConfigJsonFile(); // 删除本地文件
        deleteConfig('videoData'); // 删除存储的对象
        toast('清除成功');
        updateConfig('isClearWork', 'false')
        exit();
    }
}

// 初始化
const readUiInit = () => {
    if (isAgentMode()) {
        toast('当前程序服务: [代理模式]');
    } else if (isAccMode()) {
        toast('当前程序服务: [无障碍模式]');
    }
    const result = setFetchNodeMode(1,false,true,"nsf");

    // 读取UI配置getIpInfo
    uiConfig = readConfigString('uiConfig') || {};
    // let videoData = readConfigString('videoData') || [];
    let workIndex = readConfigString('workIndex');

    let videoTabs = baogeUtils.readConfigJsonFile();

    clearData(readConfigString('isClearWork')); // 清除配置用
    getIpInfo(readConfigString('checkIp')); // 检查本地IP
    // let cardStatus = readConfigString('cardStatus')
    let cardText = readConfigString("cardText");

    ssdunCheck(cardText) // 进行网络验证

    if (baogeUtils.getType(videoTabs) !== 'Object') { // 如果不是一个对象 那么就要转成JS对象
        videoTabs = JSON.parse(videoTabs);
        // baogeUtils.logStringify(videoTabs);
    }

    if (baogeUtils.getType(uiConfig) !== 'Object') { // 如果不是一个对象 那么就要转成JS对象
        uiConfig = JSON.parse(uiConfig);
        uiConfig.workIndex = +workIndex;
        uiConfig.videoTabs = videoTabs;
    }

    if (baogeUtils.isEmptyObject(uiConfig)) {
        toast('用户配置为空!!!');
        exit();
    }

    // 初始化启动自动化环境 启动失败自动停止脚本运行
    baogeTools.init(uiConfig);
}

// 休息模式 全局可以使用
const restMode = setp => {
    let tempTime = random(+uiConfig.restTimeMin, +uiConfig.restTimeMax) * 60;
    // toast('本次休息:' + tempTime + "秒");
    while (true){
        if (tempTime <= 0) { break }
        tempTime -= setp;
        sleep(setp * 1000);
        toast("休息中:" + setp + "S提示一下!本轮还剩余:" + baogeUtils.formatSecondsTime(tempTime) + "后恢复回去!")
    }
    // 重置一下
    baogeTools.endTimestamp = baogeUtils.getTimestamp() + baogeTools.runTime; // 结束时间戳

    baogeUtils.checkAppStatus(); // 自动启动快手 + 判断是否在前台界面
}

// 定时启动
(function (){
    let globalCount = 0;
    let globalFlag = true;
    // 初始化一些东西全放在此函数里
    readUiInit();

    // 刷短刷视频专用函数
    const seeShortPlay = () => {
        // logd('开始刷广告中....');
        // 这里记录一下 开始的时间戳
        let flag = true;
        let seeVideoCount = 0; // 计次以防页面走丢
        let timestamp = 0;

        while (flag) {
            pageUtils.adolescentMode(); // 以防青少年模式弹窗
            // 提示用户当前还有多少分钟进入休息模式
            timestamp = baogeUtils.tipUserTime(baogeTools, seeVideoCount)
            // 如果是在播放页面  如果页面走丢或者没有广告出现
            if (!baogeTools.brushVideoing() && !pageUtils.feeEpisode()) {
                // logd('下一个');
                // 作品数据就该加1
                baogeTools.workIndex++;
                updateConfig('workIndex', baogeTools.workIndex); // 把当前作品点击的索引进行保存
                // 保存用户的信息
                baogeUtils.saveConfigJsonFile(baogeTools.videoTabs);
                flag = false;
            }

            // 就是观看广告完成! 重置一下
            pageUtils.seeVideoEnd(() => {seeVideoCount = 0})
            seeVideoCount++;

            // 页面意外出现 继续观看
            if (pageUtils.continueView()) {seeVideoCount = 0}

            // 如果说一直没有被重置说明可能程序出现其他意外情况那么考虑跳出循环
            if (seeVideoCount > 20) {
                baogeTools.workIndex++; // 作品数据就该加1
                updateConfig('workIndex', baogeTools.workIndex); // 把当前作品点击的索引进行保存
                flag = false
            }

            if(timestamp >= baogeTools.endTimestamp) {
                // 如果看到已完成领取奖励 先关闭 再进入休息模式
                pageUtils.seeVideoEnd(() => { seeVideoCount = 0 })
                // toast('进入休息模式!');
                home();
                restMode(5) // 暂停功能效果

            }
            // logd('记录:' + seeVideoCount)
            sleep(500);
        }
        return true
    }

    let currentPageName= ''; // 以防弹窗
    let faildCount = 0;  // 以防弹窗
    // 刷短剧模式
    const openrateVideo = () => {
        if (globalCount > 10) {toast("可能当前未安装快手或其他情况,脚本停止!"); exit() }

        // 1. 判断当前应用是否打开并且在前台
        const appStatus = baogeUtils.checkAppStatus();
        if (!appStatus) {
            globalCount++;
            toast("进入快手失败次数:[" + globalCount + "]次");
            return;
        }
        pageUtils.continueView() // 不要问这里啥情况 可以解决一些意外情况
        globalCount = 0;

        // 进入到页面
        baogeTools.targetPage(res => {
            if (currentPageName === res) {
                // logd('faildCount:', faildCount);
                faildCount++;
                if(faildCount > 6) {
                    // logd('进入指定页面大于6次back一下');
                    baogeUtils.backs()
                }
            } else {
                currentPageName = res;
                faildCount = 0;
            }
            // logd(res);
            switch (res) {
                case 'video':
                    // 作品与用户保存的数据长度一样
                    if (baogeTools.workNum === baogeTools.videoTabs.length) {
                        baogeTools.globalDelay();
                        if (baogeTools.findVideoIndex() && pageUtils.clickShort(true)) {
                            seeShortPlay();
                        }
                    } else if(!baogeTools.videoTabs.length) {
                        baogeTools.globalDelay();
                        // toast('采集用户作品');
                        // 作品数据为空 采集用户数据
                        baogeTools.worksDataSave();
                    } else if(baogeTools.workNum > baogeTools.videoTabs.length) {
                        baogeTools.globalDelay();
                        // 用户作品增加
                        // toast('用户作品增加');
                        baogeTools.worksDataSave();
                    }else if(baogeTools.workNum < baogeTools.videoTabs.length) {
                        baogeTools.globalDelay();
                        // 用户作品删除 -> 这种情况暂时不考虑
                        toast('用户作品删除');
                    } else {
                        // toast('啥也不是!!!!!!');
                        baogeUtils.backs();
                        baogeTools.swiperNextPage(); // 刷新一下当前页面
                        baogeTools.globalDelay();
                    }
                    break;
                case 'me':
                    if (pageUtils.checkFollow(true)) { // 不需要滑动
                        // logd('无需滑动');
                        baogeTools.globalDelay();
                        // 进入到关注列表
                        pageUtils.followListFindUser(baogeTools.ksUserName);
                    } else {
                        // logd('往下翻一下');
                        // 往下翻一下 以防页面滑动到最小面了
                        baogeTools.swiperNextPage()
                    }
                    break;
                case 'work':
                    // 检查是否进入用户个人中心页面
                    if (baogeTools.works()) {
                        // logd('作品页面')
                    }
                    break;
                case 'home':
                    sleep(1000);
                    // logd('点击我');
                    pageUtils.handleClickTabbar('我');
                    break;
                case 'selection':
                    sleep(1000);
                    pageUtils.handleClickTabbar('我');
                    break;
                case 'msg':
                    sleep(1000);
                    pageUtils.handleClickTabbar('我');
                    break;
                default:
                    // logd('back')
                    !baogeTools.workNum && baogeUtils.backs()
            }
        });
    }

    // 养号模式
    const selectionVideo = () => {
        const seeSelectionVideo = () => {
            let localFlag = true;
            let localCount = 0;
            while (localFlag) {
                if (pageUtils.selectionVidoePage()) {
                    // toast('正在养号中...');
                    localCount = 0
                }
                baogeTools.swiperPrevPage();
                baogeTools.globalDelay();
                if (localCount > 10) { localFlag = false; }
                localCount++;
                let currentDelay = random(20, 50);
                toast('本次观看视频等待:' + (currentDelay) + "秒!");

                // 这里这样写有点傻 后面想办法优化一下吧
                for (let i = 0; i < currentDelay; i++) {
                    toast("倒计时剩余时间:" + (currentDelay - i) + "秒");
                    sleep(1000);
                }

                sleep(1000);
            }
        }
        // 1. 判断当前应用是否打开并且在前台
        const appStatus =  baogeUtils.checkAppStatus();
        if (!appStatus) {
            globalCount++;
            toast("进入快手失败次数:[" + globalCount + "]次");
            return
        }

        globalCount = 0;
        // logd('刷精选视频')
        baogeTools.targetPage(res => {
            // logd(res);
            if (res === "home") {pageUtils.handleClickTabbar('精选')}
            if (res === "me") {pageUtils.handleClickTabbar('精选')}
            if (res === "msg") {pageUtils.handleClickTabbar('精选')}
            if (res === "work") {back();sleep(1000)}
            if (res === "selection") {
                // toast('当前在精选页面');
                seeSelectionVideo()
            }
        })
    }
    baogeTools.endTimestamp = baogeUtils.getTimestamp() + baogeTools.runTime; // 结束时间戳

    toast('欢迎使用本产品!');

    while (globalFlag) {
        if (globalCount > 10) {
            toast('未安装快手 或 出现未知情况!停止脚本');
            // logd('未安装快手 或 出现未知情况!停止脚本');
            exit();
        }

        // 检测以防意外弹出 微信或者支付宝 充值界面
        pageUtils.paymentAlert();

        pageUtils.adolescentMode(); // 以防青少年模式弹窗

        if (baogeTools.mode === 0) { // 养号模式
            toast('当前模式为: 养号模式');
            selectionVideo()
        } else if (baogeTools.mode === 1) { // 刷短剧模式
            toast('当前模式为: 刷短剧模式');
            openrateVideo()
        }

        sleep(1000);
    }
})()